package qcmPlus.actions;

import java.security.InvalidKeyException;
import java.util.ArrayList;
import java.util.Map;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;

import qcmPlus.beans.Utilisateur;
import qcmPlus.dao.UtilisateurDao;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class GestionUtilisateursAction extends ActionSupport {
	private static final long serialVersionUID = 1L;

	private UtilisateurDao utilisateurDao = new UtilisateurDao();
	private Utilisateur utilisateur = new Utilisateur();
	private ArrayList<Utilisateur> liste = new ArrayList<Utilisateur>();
	private ArrayList<Utilisateur> utilisateurs;
	private Map<String, Object> session = ActionContext.getContext()
			.getSession();
	private int id;
	private String nom;
	private String prenom;
	private String email;
	private String password;
	private String societe;
	private boolean estAdmin;

	@Override
	public String execute() {
		liste = utilisateurDao.list();

		return SUCCESS;

	}

	public String insertion() throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException, Exception {
		boolean utilisateurValide = utilisateurValide(nom, password);
		if (utilisateurValide == false)
			return ERROR;
		else {
			String result = utilisateurDao.insertion(nom, prenom, email,
					password, societe, estAdmin);
			if (result.equals("ok")) {
				return SUCCESS;
			} else
				return ERROR;
		}
	}

	public String modification() {
		utilisateur = (Utilisateur) session.get("userdelete");
		utilisateur.setNom(nom);
		utilisateur.setPrenom(prenom);
		utilisateur.setEmail(email);
		utilisateur.setSociete(societe);
		utilisateur.setMotDePasse(password);
		utilisateur.setEstAdmin(estAdmin);
		String result = utilisateurDao.modification(utilisateur);
		if (result.equals("ok"))
			return SUCCESS;
		else
			return ERROR;
	}

	public String suppression() {
		String result = utilisateurDao.suppression((Utilisateur) getSession()
				.get("userdelete"));
		if (result.equals("ok"))
			return SUCCESS;
		else
			return ERROR;
	}

	public String edit() {
		utilisateur = utilisateurDao.getUtilisateur(getId());
		getSession().put("userdelete", utilisateur);
		return SUCCESS;
	}

	private boolean utilisateurValide(String nom, String password) {
		return true;
	}

	/**
	 * Les getters et setters
	 * 
	 */

	public Utilisateur getUtilisateur() {
		return utilisateur;
	}

	public ArrayList<Utilisateur> getUtilisateurs() {
		return utilisateurs;
	}

	public void setUtilisateur(Utilisateur utilisateur) {
		this.utilisateur = utilisateur;
	}

	public ArrayList<Utilisateur> getListe() {
		return liste;
	}

	public void setUtilisateurs(ArrayList<Utilisateur> utilisateurs) {
		this.utilisateurs = utilisateurs;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String getPrenom() {
		return prenom;
	}

	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSociete() {
		return societe;
	}

	public void setSociete(String societe) {
		this.societe = societe;
	}

	public boolean isEstAdmin() {
		return estAdmin;
	}

	public void setEstAdmin(boolean estAdmin) {
		this.estAdmin = estAdmin;
	}

	public Map<String, Object> getSession() {
		return session;
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
}